home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 24 / AACD 24.iso / AACD / Programming / gcc-2.95.3-3 / info / gcc.info-6 < prev    next >
Encoding:
GNU Info File  |  2001-07-15  |  47.7 KB  |  1,211 lines

  1. This is Info file gcc.info, produced by Makeinfo version 1.68 from the
  2. input file ./gcc.texi.
  3.  
  4. INFO-DIR-SECTION Programming
  5. START-INFO-DIR-ENTRY
  6. * gcc: (gcc).                  The GNU Compiler Collection.
  7. END-INFO-DIR-ENTRY
  8.    This file documents the use and the internals of the GNU compiler.
  9.  
  10.    Published by the Free Software Foundation 59 Temple Place - Suite 330
  11. Boston, MA 02111-1307 USA
  12.  
  13.    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
  14. 1999, 2000 Free Software Foundation, Inc.
  15.  
  16.    Permission is granted to make and distribute verbatim copies of this
  17. manual provided the copyright notice and this permission notice are
  18. preserved on all copies.
  19.  
  20.    Permission is granted to copy and distribute modified versions of
  21. this manual under the conditions for verbatim copying, provided also
  22. that the sections entitled "GNU General Public License" and "Funding
  23. for Free Software" are included exactly as in the original, and
  24. provided that the entire resulting derived work is distributed under
  25. the terms of a permission notice identical to this one.
  26.  
  27.    Permission is granted to copy and distribute translations of this
  28. manual into another language, under the above conditions for modified
  29. versions, except that the sections entitled "GNU General Public
  30. License" and "Funding for Free Software", and this permission notice,
  31. may be included in translations approved by the Free Software Foundation
  32. instead of in the original English.
  33.  
  34. 
  35. File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 Options,  Up: Submodel Options
  36.  
  37. HPPA Options
  38. ------------
  39.  
  40.    These `-m' options are defined for the HPPA family of computers:
  41.  
  42. `-march=ARCHITECTURE TYPE'
  43.      Generate code for the specified architecture.  The choices for
  44.      ARCHITECTURE TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
  45.      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
  46.      an HP-UX system to determine the proper architecture option for
  47.      your machine.  Code compiled for lower numbered architectures will
  48.      run on higher numbered architectures, but not the other way around.
  49.  
  50.      PA 2.0 support currently requires gas snapshot 19990413 or later.
  51.      The next release of binutils (current is 2.9.1) will probably
  52.      contain PA 2.0 support.
  53.  
  54. `-mpa-risc-1-0'
  55. `-mpa-risc-1-1'
  56. `-mpa-risc-2-0'
  57.      Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
  58.  
  59. `-mbig-switch'
  60.      Generate code suitable for big switch tables.  Use this option
  61.      only if the assembler/linker complain about out of range branches
  62.      within a switch table.
  63.  
  64. `-mjump-in-delay'
  65.      Fill delay slots of function calls with unconditional jump
  66.      instructions by modifying the return pointer for the function call
  67.      to be the target of the conditional jump.
  68.  
  69. `-mdisable-fpregs'
  70.      Prevent floating point registers from being used in any manner.
  71.      This is necessary for compiling kernels which perform lazy context
  72.      switching of floating point registers.  If you use this option and
  73.      attempt to perform floating point operations, the compiler will
  74.      abort.
  75.  
  76. `-mdisable-indexing'
  77.      Prevent the compiler from using indexing address modes.  This
  78.      avoids some rather obscure problems when compiling MIG generated
  79.      code under MACH.
  80.  
  81. `-mno-space-regs'
  82.      Generate code that assumes the target has no space registers.
  83.      This allows GCC to generate faster indirect calls and use unscaled
  84.      index address modes.
  85.  
  86.      Such code is suitable for level 0 PA systems and kernels.
  87.  
  88. `-mfast-indirect-calls'
  89.      Generate code that assumes calls never cross space boundaries.
  90.      This allows GCC to emit code which performs faster indirect calls.
  91.  
  92.      This option will not work in the presense of shared libraries or
  93.      nested functions.
  94.  
  95. `-mspace'
  96.      Optimize for space rather than execution time.  Currently this only
  97.      enables out of line function prologues and epilogues.  This option
  98.      is incompatible with PIC code generation and profiling.
  99.  
  100. `-mlong-load-store'
  101.      Generate 3-instruction load and store sequences as sometimes
  102.      required by the HP-UX 10 linker.  This is equivalent to the `+k'
  103.      option to the HP compilers.
  104.  
  105. `-mportable-runtime'
  106.      Use the portable calling conventions proposed by HP for ELF
  107.      systems.
  108.  
  109. `-mgas'
  110.      Enable the use of assembler directives only GAS understands.
  111.  
  112. `-mschedule=CPU TYPE'
  113.      Schedule code according to the constraints for the machine type
  114.      CPU TYPE.  The choices for CPU TYPE are `700' `7100', `7100LC',
  115.      `7200', and `8000'.  Refer to `/usr/lib/sched.models' on an HP-UX
  116.      system to determine the proper scheduling option for your machine.
  117.  
  118. `-mlinker-opt'
  119.      Enable the optimization pass in the HPUX linker.  Note this makes
  120.      symbolic debugging impossible.  It also triggers a bug in the HPUX
  121.      8 and HPUX 9 linkers in which they give bogus error messages when
  122.      linking some programs.
  123.  
  124. `-msoft-float'
  125.      Generate output containing library calls for floating point.
  126.      *Warning:* the requisite libraries are not available for all HPPA
  127.      targets.  Normally the facilities of the machine's usual C
  128.      compiler are used, but this cannot be done directly in
  129.      cross-compilation.  You must make your own arrangements to provide
  130.      suitable library functions for cross-compilation.  The embedded
  131.      target `hppa1.1-*-pro' does provide software floating point
  132.      support.
  133.  
  134.      `-msoft-float' changes the calling convention in the output file;
  135.      therefore, it is only useful if you compile *all* of a program with
  136.      this option.  In particular, you need to compile `libgcc.a', the
  137.      library that comes with GCC, with `-msoft-float' in order for this
  138.      to work.
  139.  
  140. 
  141. File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options
  142.  
  143. Intel 960 Options
  144. -----------------
  145.  
  146.    These `-m' options are defined for the Intel 960 implementations:
  147.  
  148. `-mCPU TYPE'
  149.      Assume the defaults for the machine type CPU TYPE for some of the
  150.      other options, including instruction scheduling, floating point
  151.      support, and addressing modes.  The choices for CPU TYPE are `ka',
  152.      `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.
  153.  
  154. `-mnumerics'
  155. `-msoft-float'
  156.      The `-mnumerics' option indicates that the processor does support
  157.      floating-point instructions.  The `-msoft-float' option indicates
  158.      that floating-point support should not be assumed.
  159.  
  160. `-mleaf-procedures'
  161. `-mno-leaf-procedures'
  162.      Do (or do not) attempt to alter leaf procedures to be callable
  163.      with the `bal' instruction as well as `call'.  This will result in
  164.      more efficient code for explicit calls when the `bal' instruction
  165.      can be substituted by the assembler or linker, but less efficient
  166.      code in other cases, such as calls via function pointers, or using
  167.      a linker that doesn't support this optimization.
  168.  
  169. `-mtail-call'
  170. `-mno-tail-call'
  171.      Do (or do not) make additional attempts (beyond those of the
  172.      machine-independent portions of the compiler) to optimize
  173.      tail-recursive calls into branches.  You may not want to do this
  174.      because the detection of cases where this is not valid is not
  175.      totally complete.  The default is `-mno-tail-call'.
  176.  
  177. `-mcomplex-addr'
  178. `-mno-complex-addr'
  179.      Assume (or do not assume) that the use of a complex addressing
  180.      mode is a win on this implementation of the i960.  Complex
  181.      addressing modes may not be worthwhile on the K-series, but they
  182.      definitely are on the C-series.  The default is currently
  183.      `-mcomplex-addr' for all processors except the CB and CC.
  184.  
  185. `-mcode-align'
  186. `-mno-code-align'
  187.      Align code to 8-byte boundaries for faster fetching (or don't
  188.      bother).  Currently turned on by default for C-series
  189.      implementations only.
  190.  
  191. `-mic-compat'
  192. `-mic2.0-compat'
  193. `-mic3.0-compat'
  194.      Enable compatibility with iC960 v2.0 or v3.0.
  195.  
  196. `-masm-compat'
  197. `-mintel-asm'
  198.      Enable compatibility with the iC960 assembler.
  199.  
  200. `-mstrict-align'
  201. `-mno-strict-align'
  202.      Do not permit (do permit) unaligned accesses.
  203.  
  204. `-mold-align'
  205.      Enable structure-alignment compatibility with Intel's gcc release
  206.      version 1.3 (based on gcc 1.37).  This option implies
  207.      `-mstrict-align'.
  208.  
  209. `-mlong-double-64'
  210.      Implement type `long double' as 64-bit floating point numbers.
  211.      Without the option `long double' is implemented by 80-bit floating
  212.      point numbers.  The only reason we have it because there is no
  213.      128-bit `long double' support in `fp-bit.c' yet.  So it is only
  214.      useful for people using soft-float targets.  Otherwise, we should
  215.      recommend against use of it.
  216.  
  217. 
  218. File: gcc.info,  Node: DEC Alpha Options,  Next: Clipper Options,  Prev: Intel 960 Options,  Up: Submodel Options
  219.  
  220. DEC Alpha Options
  221. -----------------
  222.  
  223.    These `-m' options are defined for the DEC Alpha implementations:
  224.  
  225. `-mno-soft-float'
  226. `-msoft-float'
  227.      Use (do not use) the hardware floating-point instructions for
  228.      floating-point operations.  When `-msoft-float' is specified,
  229.      functions in `libgcc1.c' will be used to perform floating-point
  230.      operations.  Unless they are replaced by routines that emulate the
  231.      floating-point operations, or compiled in such a way as to call
  232.      such emulations routines, these routines will issue floating-point
  233.      operations.   If you are compiling for an Alpha without
  234.      floating-point operations, you must ensure that the library is
  235.      built so as not to call them.
  236.  
  237.      Note that Alpha implementations without floating-point operations
  238.      are required to have floating-point registers.
  239.  
  240. `-mfp-reg'
  241. `-mno-fp-regs'
  242.      Generate code that uses (does not use) the floating-point register
  243.      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
  244.      register set is not used, floating point operands are passed in
  245.      integer registers as if they were integers and floating-point
  246.      results are passed in $0 instead of $f0.  This is a non-standard
  247.      calling sequence, so any function with a floating-point argument
  248.      or return value called by code compiled with `-mno-fp-regs' must
  249.      also be compiled with that option.
  250.  
  251.      A typical use of this option is building a kernel that does not
  252.      use, and hence need not save and restore, any floating-point
  253.      registers.
  254.  
  255. `-mieee'
  256.      The Alpha architecture implements floating-point hardware
  257.      optimized for maximum performance.  It is mostly compliant with
  258.      the IEEE floating point standard.  However, for full compliance,
  259.      software assistance is required.  This option generates code fully
  260.      IEEE compliant code *except* that the INEXACT FLAG is not
  261.      maintained (see below).  If this option is turned on, the CPP
  262.      macro `_IEEE_FP' is defined during compilation.  The option is a
  263.      shorthand for: `-D_IEEE_FP -mfp-trap-mode=su -mtrap-precision=i
  264.      -mieee-conformant'.  The resulting code is less efficient but is
  265.      able to correctly support denormalized numbers and exceptional
  266.      IEEE values such as not-a-number and plus/minus infinity.  Other
  267.      Alpha compilers call this option `-ieee_with_no_inexact'.
  268.  
  269. `-mieee-with-inexact'
  270.      This is like `-mieee' except the generated code also maintains the
  271.      IEEE INEXACT FLAG.  Turning on this option causes the generated
  272.      code to implement fully-compliant IEEE math.  The option is a
  273.      shorthand for `-D_IEEE_FP -D_IEEE_FP_INEXACT' plus the three
  274.      following: `-mieee-conformant', `-mfp-trap-mode=sui', and
  275.      `-mtrap-precision=i'.  On some Alpha implementations the resulting
  276.      code may execute significantly slower than the code generated by
  277.      default.  Since there is very little code that depends on the
  278.      INEXACT FLAG, you should normally not specify this option.  Other
  279.      Alpha compilers call this option `-ieee_with_inexact'.
  280.  
  281. `-mfp-trap-mode=TRAP MODE'
  282.      This option controls what floating-point related traps are enabled.
  283.      Other Alpha compilers call this option `-fptm 'TRAP MODE.  The
  284.      trap mode can be set to one of four values:
  285.  
  286.     `n'
  287.           This is the default (normal) setting.  The only traps that
  288.           are enabled are the ones that cannot be disabled in software
  289.           (e.g., division by zero trap).
  290.  
  291.     `u'
  292.           In addition to the traps enabled by `n', underflow traps are
  293.           enabled as well.
  294.  
  295.     `su'
  296.           Like `su', but the instructions are marked to be safe for
  297.           software completion (see Alpha architecture manual for
  298.           details).
  299.  
  300.     `sui'
  301.           Like `su', but inexact traps are enabled as well.
  302.  
  303. `-mfp-rounding-mode=ROUNDING MODE'
  304.      Selects the IEEE rounding mode.  Other Alpha compilers call this
  305.      option `-fprm 'ROUNDING MODE.  The ROUNDING MODE can be one of:
  306.  
  307.     `n'
  308.           Normal IEEE rounding mode.  Floating point numbers are
  309.           rounded towards the nearest machine number or towards the
  310.           even machine number in case of a tie.
  311.  
  312.     `m'
  313.           Round towards minus infinity.
  314.  
  315.     `c'
  316.           Chopped rounding mode.  Floating point numbers are rounded
  317.           towards zero.
  318.  
  319.     `d'
  320.           Dynamic rounding mode.  A field in the floating point control
  321.           register (FPCR, see Alpha architecture reference manual)
  322.           controls the rounding mode in effect.  The C library
  323.           initializes this register for rounding towards plus infinity.
  324.           Thus, unless your program modifies the FPCR, `d' corresponds
  325.           to round towards plus infinity.
  326.  
  327. `-mtrap-precision=TRAP PRECISION'
  328.      In the Alpha architecture, floating point traps are imprecise.
  329.      This means without software assistance it is impossible to recover
  330.      from a floating trap and program execution normally needs to be
  331.      terminated.  GCC can generate code that can assist operating
  332.      system trap handlers in determining the exact location that caused
  333.      a floating point trap.  Depending on the requirements of an
  334.      application, different levels of precisions can be selected:
  335.  
  336.     `p'
  337.           Program precision.  This option is the default and means a
  338.           trap handler can only identify which program caused a
  339.           floating point exception.
  340.  
  341.     `f'
  342.           Function precision.  The trap handler can determine the
  343.           function that caused a floating point exception.
  344.  
  345.     `i'
  346.           Instruction precision.  The trap handler can determine the
  347.           exact instruction that caused a floating point exception.
  348.  
  349.      Other Alpha compilers provide the equivalent options called
  350.      `-scope_safe' and `-resumption_safe'.
  351.  
  352. `-mieee-conformant'
  353.      This option marks the generated code as IEEE conformant.  You must
  354.      not use this option unless you also specify `-mtrap-precision=i'
  355.      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
  356.      effect is to emit the line `.eflag 48' in the function prologue of
  357.      the generated assembly file.  Under DEC Unix, this has the effect
  358.      that IEEE-conformant math library routines will be linked in.
  359.  
  360. `-mbuild-constants'
  361.      Normally GCC examines a 32- or 64-bit integer constant to see if
  362.      it can construct it from smaller constants in two or three
  363.      instructions.  If it cannot, it will output the constant as a
  364.      literal and generate code to load it from the data segment at
  365.      runtime.
  366.  
  367.      Use this option to require GCC to construct *all* integer constants
  368.      using code, even if it takes more instructions (the maximum is
  369.      six).
  370.  
  371.      You would typically use this option to build a shared library
  372.      dynamic loader.  Itself a shared library, it must relocate itself
  373.      in memory before it can find the variables and constants in its
  374.      own data segment.
  375.  
  376. `-malpha-as'
  377. `-mgas'
  378.      Select whether to generate code to be assembled by the
  379.      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
  380.      `-mgas'.
  381.  
  382. `-mbwx'
  383. `-mno-bwx'
  384. `-mcix'
  385. `-mno-cix'
  386. `-mmax'
  387. `-mno-max'
  388.      Indicate whether GCC should generate code to use the optional BWX,
  389.      CIX, and MAX instruction sets.  The default is to use the
  390.      instruction sets supported by the CPU type specified via `-mcpu='
  391.      option or that of the CPU on which GCC was built if none was
  392.      specified.
  393.  
  394. `-mcpu=CPU_TYPE'
  395.      Set the instruction set, register set, and instruction scheduling
  396.      parameters for machine type CPU_TYPE.  You can specify either the
  397.      `EV' style name or the corresponding chip number.  GCC supports
  398.      scheduling parameters for the EV4 and EV5 family of processors and
  399.      will choose the default values for the instruction set from the
  400.      processor you specify.  If you do not specify a processor type,
  401.      GCC will default to the processor on which the compiler was built.
  402.  
  403.      Supported values for CPU_TYPE are
  404.  
  405.     `ev4'
  406.     `21064'
  407.           Schedules as an EV4 and has no instruction set extensions.
  408.  
  409.     `ev5'
  410.     `21164'
  411.           Schedules as an EV5 and has no instruction set extensions.
  412.  
  413.     `ev56'
  414.     `21164a'
  415.           Schedules as an EV5 and supports the BWX extension.
  416.  
  417.     `pca56'
  418.     `21164pc'
  419.     `21164PC'
  420.           Schedules as an EV5 and supports the BWX and MAX extensions.
  421.  
  422.     `ev6'
  423.     `21264'
  424.           Schedules as an EV5 (until Digital releases the scheduling
  425.           parameters for the EV6) and supports the BWX, CIX, and MAX
  426.           extensions.
  427.  
  428. `-mmemory-latency=TIME'
  429.      Sets the latency the scheduler should assume for typical memory
  430.      references as seen by the application.  This number is highly
  431.      dependant on the memory access patterns used by the application
  432.      and the size of the external cache on the machine.
  433.  
  434.      Valid options for TIME are
  435.  
  436.     `NUMBER'
  437.           A decimal number representing clock cycles.
  438.  
  439.     `L1'
  440.     `L2'
  441.     `L3'
  442.     `main'
  443.           The compiler contains estimates of the number of clock cycles
  444.           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
  445.           (also called Dcache, Scache, and Bcache), as well as to main
  446.           memory.  Note that L3 is only valid for EV5.
  447.  
  448. 
  449. File: gcc.info,  Node: Clipper Options,  Next: H8/300 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
  450.  
  451. Clipper Options
  452. ---------------
  453.  
  454.    These `-m' options are defined for the Clipper implementations:
  455.  
  456. `-mc300'
  457.      Produce code for a C300 Clipper processor. This is the default.
  458.  
  459. `-mc400'
  460.      Produce code for a C400 Clipper processor i.e. use floating point
  461.      registers f8..f15.
  462.  
  463. 
  464. File: gcc.info,  Node: H8/300 Options,  Next: SH Options,  Prev: Clipper Options,  Up: Submodel Options
  465.  
  466. H8/300 Options
  467. --------------
  468.  
  469.    These `-m' options are defined for the H8/300 implementations:
  470.  
  471. `-mrelax'
  472.      Shorten some address references at link time, when possible; uses
  473.      the linker option `-relax'.  *Note `ld' and the H8/300:
  474.      (ld.info)H8/300, for a fuller description.
  475.  
  476. `-mh'
  477.      Generate code for the H8/300H.
  478.  
  479. `-ms'
  480.      Generate code for the H8/S.
  481.  
  482. `-mint32'
  483.      Make `int' data 32 bits by default.
  484.  
  485. `-malign-300'
  486.      On the h8/300h, use the same alignment rules as for the h8/300.
  487.      The default for the h8/300h is to align longs and floats on 4 byte
  488.      boundaries.  `-malign-300' causes them to be aligned on 2 byte
  489.      boundaries.  This option has no effect on the h8/300.
  490.  
  491. 
  492. File: gcc.info,  Node: SH Options,  Next: System V Options,  Prev: H8/300 Options,  Up: Submodel Options
  493.  
  494. SH Options
  495. ----------
  496.  
  497.    These `-m' options are defined for the SH implementations:
  498.  
  499. `-m1'
  500.      Generate code for the SH1.
  501.  
  502. `-m2'
  503.      Generate code for the SH2.
  504.  
  505. `-m3'
  506.      Generate code for the SH3.
  507.  
  508. `-m3e'
  509.      Generate code for the SH3e.
  510.  
  511. `-mb'
  512.      Compile code for the processor in big endian mode.
  513.  
  514. `-ml'
  515.      Compile code for the processor in little endian mode.
  516.  
  517. `-mdalign'
  518.      Align doubles at 64 bit boundaries.  Note that this changes the
  519.      calling conventions, and thus some functions from the standard C
  520.      library will not work unless you recompile it first with -mdalign.
  521.  
  522. `-mrelax'
  523.      Shorten some address references at link time, when possible; uses
  524.      the linker option `-relax'.
  525.  
  526. 
  527. File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SH Options,  Up: Submodel Options
  528.  
  529. Options for System V
  530. --------------------
  531.  
  532.    These additional options are available on System V Release 4 for
  533. compatibility with other compilers on those systems:
  534.  
  535. `-G'
  536.      Create a shared object.  It is recommended that `-symbolic' or
  537.      `-shared' be used instead.
  538.  
  539. `-Qy'
  540.      Identify the versions of each tool used by the compiler, in a
  541.      `.ident' assembler directive in the output.
  542.  
  543. `-Qn'
  544.      Refrain from adding `.ident' directives to the output file (this is
  545.      the default).
  546.  
  547. `-YP,DIRS'
  548.      Search the directories DIRS, and no others, for libraries
  549.      specified with `-l'.
  550.  
  551. `-Ym,DIR'
  552.      Look in the directory DIR to find the M4 preprocessor.  The
  553.      assembler uses this option.
  554.  
  555. 
  556. File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
  557.  
  558. TMS320C3x/C4x Options
  559. ---------------------
  560.  
  561.    These `-m' options are defined for TMS320C3x/C4x implementations:
  562.  
  563. `-mcpu=CPU_TYPE'
  564.      Set the instruction set, register set, and instruction scheduling
  565.      parameters for machine type CPU_TYPE.  Supported values for
  566.      CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
  567.      is `c40' to generate code for the TMS320C40.
  568.  
  569. `-mbig-memory'
  570.  
  571. `-mbig'
  572. `-msmall-memory'
  573. `-msmall'
  574.      Generates code for the big or small memory model.  The small memory
  575.      model assumed that all data fits into one 64K word page.  At
  576.      run-time the data page (DP) register must be set to point to the
  577.      64K page containing the .bss and .data program sections.  The big
  578.      memory model is the default and requires reloading of the DP
  579.      register for every direct memory access.
  580.  
  581. `-mbk'
  582. `-mno-bk'
  583.      Allow (disallow) allocation of general integer operands into the
  584.      block count register BK.
  585.  
  586. `-mdb'
  587. `-mno-db'
  588.      Enable (disable) generation of code using decrement and branch,
  589.      DBcond(D), instructions.  This is enabled by default for the C4x.
  590.      To be on the safe side, this is disabled for the C3x, since the
  591.      maximum iteration count on the C3x is 2^23 + 1 (but who iterates
  592.      loops more than 2^23 times on the C3x?).  Note that GCC will try
  593.      to reverse a loop so that it can utilise the decrement and branch
  594.      instruction, but will give up if there is more than one memory
  595.      reference in the loop.  Thus a loop where the loop counter is
  596.      decremented can generate slightly more efficient code, in cases
  597.      where the RPTB instruction cannot be utilised.
  598.  
  599. `-mdp-isr-reload'
  600. `-mparanoid'
  601.      Force the DP register to be saved on entry to an interrupt service
  602.      routine (ISR), reloaded to point to the data section, and restored
  603.      on exit from the ISR.  This should not be required unless someone
  604.      has violated the small memory model by modifying the DP register,
  605.      say within an object library.
  606.  
  607. `-mmpyi'
  608. `-mno-mpyi'
  609.      For the C3x use the 24-bit MPYI instruction for integer multiplies
  610.      instead of a library call to guarantee 32-bit results.  Note that
  611.      if one of the operands is a constant, then the multiplication will
  612.      be performed using shifts and adds.  If the -mmpyi option is not
  613.      specified for the C3x, then squaring operations are performed
  614.      inline instead of a library call.
  615.  
  616. `-mfast-fix'
  617. `-mno-fast-fix'
  618.      The C3x/C4x FIX instruction to convert a floating point value to an
  619.      integer value chooses the nearest integer less than or equal to the
  620.      floating point value rather than to the nearest integer.  Thus if
  621.      the floating point number is negative, the result will be
  622.      incorrectly truncated an additional code is necessary to detect
  623.      and correct this case.  This option can be used to disable
  624.      generation of the additional code required to correct the result.
  625.  
  626. `-mrptb'
  627. `-mno-rptb'
  628.      Enable (disable) generation of repeat block sequences using the
  629.      RPTB instruction for zero overhead looping.  The RPTB construct is
  630.      only used for innermost loops that do not call functions or jump
  631.      across the loop boundaries.  There is no advantage having nested
  632.      RPTB loops due to the overhead required to save and restore the
  633.      RC, RS, and RE registers.  This is enabled by default with -O2.
  634.  
  635. `-mrpts=COUNT'
  636. `-mno-rpts'
  637.      Enable (disable) the use of the single instruction repeat
  638.      instruction RPTS.  If a repeat block contains a single
  639.      instruction, and the loop count can be guaranteed to be less than
  640.      the value COUNT, GCC will emit a RPTS instruction instead of a
  641.      RPTB.  If no value is specified, then a RPTS will be emitted even
  642.      if the loop count cannot be determined at compile time.  Note that
  643.      the repeated instruction following RPTS does not have to be
  644.      reloaded from memory each iteration, thus freeing up the CPU buses
  645.      for oeprands.  However, since interrupts are blocked by this
  646.      instruction, it is disabled by default.
  647.  
  648. `-mloop-unsigned'
  649. `-mno-loop-unsigned'
  650.      The maximum iteration count when using RPTS and RPTB (and DB on
  651.      the C40) is 2^31 + 1 since these instructions test if the
  652.      iteration count is negative to terminate the loop.  If the
  653.      iteration count is unsigned there is a possibility than the 2^31 +
  654.      1 maximum iteration count may be exceeded.  This switch allows an
  655.      unsigned iteration count.
  656.  
  657. `-mti'
  658.      Try to emit an assembler syntax that the TI assembler (asm30) is
  659.      happy with.  This also enforces compatibility with the API
  660.      employed by the TI C3x C compiler.  For example, long doubles are
  661.      passed as structures rather than in floating point registers.
  662.  
  663. `-mregparm'
  664. `-mmemparm'
  665.      Generate code that uses registers (stack) for passing arguments to
  666.      functions.  By default, arguments are passed in registers where
  667.      possible rather than by pushing arguments on to the stack.
  668.  
  669. `-mparallel-insns'
  670. `-mno-parallel-insns'
  671.      Allow the generation of parallel instructions.  This is enabled by
  672.      default with -O2.
  673.  
  674. `-mparallel-mpy'
  675. `-mno-parallel-mpy'
  676.      Allow the generation of MPY||ADD and MPY||SUB parallel
  677.      instructions, provided -mparallel-insns is also specified.  These
  678.      instructions have tight register constraints which can pessimize
  679.      the code generation of large functions.
  680.  
  681. 
  682. File: gcc.info,  Node: V850 Options,  Next: ARC Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
  683.  
  684. V850 Options
  685. ------------
  686.  
  687.    These `-m' options are defined for V850 implementations:
  688.  
  689. `-mlong-calls'
  690. `-mno-long-calls'
  691.      Treat all calls as being far away (near).  If calls are assumed to
  692.      be far away, the compiler will always load the functions address
  693.      up into a register, and call indirect through the pointer.
  694.  
  695. `-mno-ep'
  696. `-mep'
  697.      Do not optimize (do optimize) basic blocks that use the same index
  698.      pointer 4 or more times to copy pointer into the `ep' register, and
  699.      use the shorter `sld' and `sst' instructions.  The `-mep' option
  700.      is on by default if you optimize.
  701.  
  702. `-mno-prolog-function'
  703. `-mprolog-function'
  704.      Do not use (do use) external functions to save and restore
  705.      registers at the prolog and epilog of a function.  The external
  706.      functions are slower, but use less code space if more than one
  707.      function saves the same number of registers.  The
  708.      `-mprolog-function' option is on by default if you optimize.
  709.  
  710. `-mspace'
  711.      Try to make the code as small as possible.  At present, this just
  712.      turns on the `-mep' and `-mprolog-function' options.
  713.  
  714. `-mtda=N'
  715.      Put static or global variables whose size is N bytes or less into
  716.      the tiny data area that register `ep' points to.  The tiny data
  717.      area can hold up to 256 bytes in total (128 bytes for byte
  718.      references).
  719.  
  720. `-msda=N'
  721.      Put static or global variables whose size is N bytes or less into
  722.      the small data area that register `gp' points to.  The small data
  723.      area can hold up to 64 kilobytes.
  724.  
  725. `-mzda=N'
  726.      Put static or global variables whose size is N bytes or less into
  727.      the first 32 kilobytes of memory.
  728.  
  729. `-mv850'
  730.      Specify that the target processor is the V850.
  731.  
  732. `-mbig-switch'
  733.      Generate code suitable for big switch tables.  Use this option
  734.      only if the assembler/linker complain about out of range branches
  735.      within a switch table.
  736.  
  737. 
  738. File: gcc.info,  Node: ARC Options,  Next: NS32K Options,  Prev: V850 Options,  Up: Submodel Options
  739.  
  740. ARC Options
  741. -----------
  742.  
  743.    These options are defined for ARC implementations:
  744.  
  745. `-EL'
  746.      Compile code for little endian mode.  This is the default.
  747.  
  748. `-EB'
  749.      Compile code for big endian mode.
  750.  
  751. `-mmangle-cpu'
  752.      Prepend the name of the cpu to all public symbol names.  In
  753.      multiple-processor systems, there are many ARC variants with
  754.      different instruction and register set characteristics.  This flag
  755.      prevents code compiled for one cpu to be linked with code compiled
  756.      for another.  No facility exists for handling variants that are
  757.      "almost identical".  This is an all or nothing option.
  758.  
  759. `-mcpu=CPU'
  760.      Compile code for ARC variant CPU.  Which variants are supported
  761.      depend on the configuration.  All variants support `-mcpu=base',
  762.      this is the default.
  763.  
  764. `-mtext=TEXT SECTION'
  765. `-mdata=DATA SECTION'
  766. `-mrodata=READONLY DATA SECTION'
  767.      Put functions, data, and readonly data in TEXT SECTION, DATA
  768.      SECTION, and READONLY DATA SECTION respectively by default.  This
  769.      can be overridden with the `section' attribute.  *Note Variable
  770.      Attributes::.
  771.  
  772. 
  773. File: gcc.info,  Node: NS32K Options,  Prev: ARC Options,  Up: Submodel Options
  774.  
  775. NS32K Options
  776. -------------
  777.  
  778.    These are the `-m' options defined for the 32000 series.  The default
  779. values for these options depends on which style of 32000 was selected
  780. when the compiler was configured; the defaults for the most common
  781. choices are given below.
  782.  
  783. `-m32032'
  784. `-m32032'
  785.      Generate output for a 32032.  This is the default when the
  786.      compiler is configured for 32032 and 32016 based systems.
  787.  
  788. `-m32332'
  789. `-m32332'
  790.      Generate output for a 32332.  This is the default when the
  791.      compiler is configured for 32332-based systems.
  792.  
  793. `-m32532'
  794. `-m32532'
  795.      Generate output for a 32532.  This is the default when the
  796.      compiler is configured for 32532-based systems.
  797.  
  798. `-m32081'
  799.      Generate output containing 32081 instructions for floating point.
  800.      This is the default for all systems.
  801.  
  802. `-m32381'
  803.      Generate output containing 32381 instructions for floating point.
  804.      This also implies `-m32081'. The 32381 is only compatible with the
  805.      32332 and 32532 cpus. This is the default for the pc532-netbsd
  806.      configuration.
  807.  
  808. `-mmulti-add'
  809.      Try and generate multiply-add floating point instructions `polyF'
  810.      and `dotF'. This option is only available if the `-m32381' option
  811.      is in effect. Using these instructions requires changes to to
  812.      register allocation which generally has a negative impact on
  813.      performance.  This option should only be enabled when compiling
  814.      code particularly likely to make heavy use of multiply-add
  815.      instructions.
  816.  
  817. `-mnomulti-add'
  818.      Do not try and generate multiply-add floating point instructions
  819.      `polyF' and `dotF'. This is the default on all platforms.
  820.  
  821. `-msoft-float'
  822.      Generate output containing library calls for floating point.
  823.      *Warning:* the requisite libraries may not be available.
  824.  
  825. `-mnobitfield'
  826.      Do not use the bit-field instructions. On some machines it is
  827.      faster to use shifting and masking operations. This is the default
  828.      for the pc532.
  829.  
  830. `-mbitfield'
  831.      Do use the bit-field instructions. This is the default for all
  832.      platforms except the pc532.
  833.  
  834. `-mrtd'
  835.      Use a different function-calling convention, in which functions
  836.      that take a fixed number of arguments return pop their arguments
  837.      on return with the `ret' instruction.
  838.  
  839.      This calling convention is incompatible with the one normally used
  840.      on Unix, so you cannot use it if you need to call libraries
  841.      compiled with the Unix compiler.
  842.  
  843.      Also, you must provide function prototypes for all functions that
  844.      take variable numbers of arguments (including `printf'); otherwise
  845.      incorrect code will be generated for calls to those functions.
  846.  
  847.      In addition, seriously incorrect code will result if you call a
  848.      function with too many arguments.  (Normally, extra arguments are
  849.      harmlessly ignored.)
  850.  
  851.      This option takes its name from the 680x0 `rtd' instruction.
  852.  
  853. `-mregparam'
  854.      Use a different function-calling convention where the first two
  855.      arguments are passed in registers.
  856.  
  857.      This calling convention is incompatible with the one normally used
  858.      on Unix, so you cannot use it if you need to call libraries
  859.      compiled with the Unix compiler.
  860.  
  861. `-mnoregparam'
  862.      Do not pass any arguments in registers. This is the default for all
  863.      targets.
  864.  
  865. `-msb'
  866.      It is OK to use the sb as an index register which is always loaded
  867.      with zero. This is the default for the pc532-netbsd target.
  868.  
  869. `-mnosb'
  870.      The sb register is not available for use or has not been
  871.      initialized to zero by the run time system. This is the default
  872.      for all targets except the pc532-netbsd. It is also implied
  873.      whenever `-mhimem' or `-fpic' is set.
  874.  
  875. `-mhimem'
  876.      Many ns32000 series addressing modes use displacements of up to
  877.      512MB.  If an address is above 512MB then displacements from zero
  878.      can not be used.  This option causes code to be generated which
  879.      can be loaded above 512MB.  This may be useful for operating
  880.      systems or ROM code.
  881.  
  882. `-mnohimem'
  883.      Assume code will be loaded in the first 512MB of virtual address
  884.      space.  This is the default for all platforms.
  885.  
  886. 
  887. File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
  888.  
  889. Options for Code Generation Conventions
  890. =======================================
  891.  
  892.    These machine-independent options control the interface conventions
  893. used in code generation.
  894.  
  895.    Most of them have both positive and negative forms; the negative form
  896. of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
  897. forms is listed--the one which is not the default.  You can figure out
  898. the other form by either removing `no-' or adding it.
  899.  
  900. `-fexceptions'
  901.      Enable exception handling. Generates extra code needed to propagate
  902.      exceptions.  For some targets, this implies generation of frame
  903.      unwind information for all functions. This can produce significant
  904.      data size overhead, although it does not affect execution.  If you
  905.      do not specify this option, it is enabled by default for languages
  906.      like C++ which normally require exception handling, and disabled
  907.      for languages like C that do not normally require it.  However,
  908.      when compiling C code that needs to interoperate properly with
  909.      exception handlers written in C++, you may need to enable this
  910.      option.  You may also wish to disable this option is you are
  911.      compiling older C++ programs that don't use exception handling.
  912.  
  913. `-fpcc-struct-return'
  914.      Return "short" `struct' and `union' values in memory like longer
  915.      ones, rather than in registers.  This convention is less
  916.      efficient, but it has the advantage of allowing intercallability
  917.      between GCC-compiled files and files compiled with other compilers.
  918.  
  919.      The precise convention for returning structures in memory depends
  920.      on the target configuration macros.
  921.  
  922.      Short structures and unions are those whose size and alignment
  923.      match that of some integer type.
  924.  
  925. `-freg-struct-return'
  926.      Use the convention that `struct' and `union' values are returned
  927.      in registers when possible.  This is more efficient for small
  928.      structures than `-fpcc-struct-return'.
  929.  
  930.      If you specify neither `-fpcc-struct-return' nor its contrary
  931.      `-freg-struct-return', GCC defaults to whichever convention is
  932.      standard for the target.  If there is no standard convention, GCC
  933.      defaults to `-fpcc-struct-return', except on targets where GCC is
  934.      the principal compiler.  In those cases, we can choose the
  935.      standard, and we chose the more efficient register return
  936.      alternative.
  937.  
  938. `-fshort-enums'
  939.      Allocate to an `enum' type only as many bytes as it needs for the
  940.      declared range of possible values.  Specifically, the `enum' type
  941.      will be equivalent to the smallest integer type which has enough
  942.      room.
  943.  
  944. `-fshort-double'
  945.      Use the same size for `double' as for `float'.
  946.  
  947. `-fshared-data'
  948.      Requests that the data and non-`const' variables of this
  949.      compilation be shared data rather than private data.  The
  950.      distinction makes sense only on certain operating systems, where
  951.      shared data is shared between processes running the same program,
  952.      while private data exists in one copy per process.
  953.  
  954. `-fno-common'
  955.      Allocate even uninitialized global variables in the bss section of
  956.      the object file, rather than generating them as common blocks.
  957.      This has the effect that if the same variable is declared (without
  958.      `extern') in two different compilations, you will get an error
  959.      when you link them.  The only reason this might be useful is if
  960.      you wish to verify that the program will work on other systems
  961.      which always work this way.
  962.  
  963. `-fno-ident'
  964.      Ignore the `#ident' directive.
  965.  
  966. `-fno-gnu-linker'
  967.      Do not output global initializations (such as C++ constructors and
  968.      destructors) in the form used by the GNU linker (on systems where
  969.      the GNU linker is the standard method of handling them).  Use this
  970.      option when you want to use a non-GNU linker, which also requires
  971.      using the `collect2' program to make sure the system linker
  972.      includes constructors and destructors.  (`collect2' is included in
  973.      the GCC distribution.)  For systems which *must* use `collect2',
  974.      the compiler driver `gcc' is configured to do this automatically.
  975.  
  976. `-finhibit-size-directive'
  977.      Don't output a `.size' assembler directive, or anything else that
  978.      would cause trouble if the function is split in the middle, and the
  979.      two halves are placed at locations far apart in memory.  This
  980.      option is used when compiling `crtstuff.c'; you should not need to
  981.      use it for anything else.
  982.  
  983. `-fverbose-asm'
  984.      Put extra commentary information in the generated assembly code to
  985.      make it more readable.  This option is generally only of use to
  986.      those who actually need to read the generated assembly code
  987.      (perhaps while debugging the compiler itself).
  988.  
  989.      `-fno-verbose-asm', the default, causes the extra information to
  990.      be omitted and is useful when comparing two assembler files.
  991.  
  992. `-fvolatile'
  993.      Consider all memory references through pointers to be volatile.
  994.  
  995. `-fvolatile-global'
  996.      Consider all memory references to extern and global data items to
  997.      be volatile.  GCC does not consider static data items to be
  998.      volatile because of this switch.
  999.  
  1000. `-fvolatile-static'
  1001.      Consider all memory references to static data to be volatile.
  1002.  
  1003. `-fpic'
  1004.      Generate position-independent code (PIC) suitable for use in a
  1005.      shared library, if supported for the target machine.  Such code
  1006.      accesses all constant addresses through a global offset table
  1007.      (GOT).  The dynamic loader resolves the GOT entries when the
  1008.      program starts (the dynamic loader is not part of GCC; it is part
  1009.      of the operating system).  If the GOT size for the linked
  1010.      executable exceeds a machine-specific maximum size, you get an
  1011.      error message from the linker indicating that `-fpic' does not
  1012.      work; in that case, recompile with `-fPIC' instead.  (These
  1013.      maximums are 16k on the m88k, 8k on the Sparc, and 32k on the m68k
  1014.      and RS/6000.  The 386 has no such limit.)
  1015.  
  1016.      Position-independent code requires special support, and therefore
  1017.      works only on certain machines.  For the 386, GCC supports PIC for
  1018.      System V but not for the Sun 386i.  Code generated for the IBM
  1019.      RS/6000 is always position-independent.
  1020.  
  1021. `-fPIC'
  1022.      If supported for the target machine, emit position-independent
  1023.      code, suitable for dynamic linking and avoiding any limit on the
  1024.      size of the global offset table.  This option makes a difference
  1025.      on the m68k, m88k, and the Sparc.
  1026.  
  1027.      Position-independent code requires special support, and therefore
  1028.      works only on certain machines.
  1029.  
  1030. `-ffixed-REG'
  1031.      Treat the register named REG as a fixed register; generated code
  1032.      should never refer to it (except perhaps as a stack pointer, frame
  1033.      pointer or in some other fixed role).
  1034.  
  1035.      REG must be the name of a register.  The register names accepted
  1036.      are machine-specific and are defined in the `REGISTER_NAMES' macro
  1037.      in the machine description macro file.
  1038.  
  1039.      This flag does not have a negative form, because it specifies a
  1040.      three-way choice.
  1041.  
  1042. `-fcall-used-REG'
  1043.      Treat the register named REG as an allocable register that is
  1044.      clobbered by function calls.  It may be allocated for temporaries
  1045.      or variables that do not live across a call.  Functions compiled
  1046.      this way will not save and restore the register REG.
  1047.  
  1048.      It is an error to used this flag with the frame pointer or stack
  1049.      pointer.  Use of this flag for other registers that have fixed
  1050.      pervasive roles in the machine's execution model will produce
  1051.      disastrous results.
  1052.  
  1053.      This flag does not have a negative form, because it specifies a
  1054.      three-way choice.
  1055.  
  1056. `-fcall-saved-REG'
  1057.      Treat the register named REG as an allocable register saved by
  1058.      functions.  It may be allocated even for temporaries or variables
  1059.      that live across a call.  Functions compiled this way will save
  1060.      and restore the register REG if they use it.
  1061.  
  1062.      It is an error to used this flag with the frame pointer or stack
  1063.      pointer.  Use of this flag for other registers that have fixed
  1064.      pervasive roles in the machine's execution model will produce
  1065.      disastrous results.
  1066.  
  1067.      A different sort of disaster will result from the use of this flag
  1068.      for a register in which function values may be returned.
  1069.  
  1070.      This flag does not have a negative form, because it specifies a
  1071.      three-way choice.
  1072.  
  1073. `-fpack-struct'
  1074.      Pack all structure members together without holes.  Usually you
  1075.      would not want to use this option, since it makes the code
  1076.      suboptimal, and the offsets of structure members won't agree with
  1077.      system libraries.
  1078.  
  1079. `-fcheck-memory-usage'
  1080.      Generate extra code to check each memory access.  GCC will generate
  1081.      code that is suitable for a detector of bad memory accesses such as
  1082.      `Checker'.
  1083.  
  1084.      Normally, you should compile all, or none, of your code with this
  1085.      option.
  1086.  
  1087.      If you do mix code compiled with and without this option, you must
  1088.      ensure that all code that has side effects and that is called by
  1089.      code compiled with this option is, itself, compiled with this
  1090.      option.  If you do not, you might get erroneous messages from the
  1091.      detector.
  1092.  
  1093.      If you use functions from a library that have side-effects (such as
  1094.      `read'), you might not be able to recompile the library and
  1095.      specify this option.  In that case, you can enable the
  1096.      `-fprefix-function-name' option, which requests GCC to encapsulate
  1097.      your code and make other functions look as if they were compiled
  1098.      with `-fcheck-memory-usage'.  This is done by calling "stubs",
  1099.      which are provided by the detector.  If you cannot find or build
  1100.      stubs for every function you call, you might have to specify
  1101.      `-fcheck-memory-usage' without `-fprefix-function-name'.
  1102.  
  1103.      If you specify this option, you can not use the `asm' or `__asm__'
  1104.      keywords in functions with memory checking enabled.  The compiler
  1105.      cannot understand what the `asm' statement will do, and therefore
  1106.      cannot generate the appropriate code, so it is rejected.  However,
  1107.      the function attribute `no_check_memory_usage' will disable memory
  1108.      checking within a function, and `asm' statements can be put inside
  1109.      such functions.  Inline expansion of a non-checked function within
  1110.      a checked function is permitted; the inline function's memory
  1111.      accesses won't be checked, but the rest will.
  1112.  
  1113.      If you move your `asm' statements to non-checked inline functions,
  1114.      but they do access memory, you can add calls to the support code
  1115.      in your inline function, to indicate any reads, writes, or copies
  1116.      being done.  These calls would be similar to those done in the
  1117.      stubs described above.
  1118.  
  1119. `-fprefix-function-name'
  1120.      Request GCC to add a prefix to the symbols generated for function
  1121.      names.  GCC adds a prefix to the names of functions defined as
  1122.      well as functions called.  Code compiled with this option and code
  1123.      compiled without the option can't be linked together, unless stubs
  1124.      are used.
  1125.  
  1126.      If you compile the following code with `-fprefix-function-name'
  1127.           extern void bar (int);
  1128.           void
  1129.           foo (int a)
  1130.           {
  1131.             return bar (a + 5);
  1132.           }
  1133.  
  1134.      GCC will compile the code as if it was written:
  1135.           extern void prefix_bar (int);
  1136.           void
  1137.           prefix_foo (int a)
  1138.           {
  1139.             return prefix_bar (a + 5);
  1140.           }
  1141.      This option is designed to be used with `-fcheck-memory-usage'.
  1142.  
  1143. `-finstrument-functions'
  1144.      Generate instrumentation calls for entry and exit to functions.
  1145.      Just after function entry and just before function exit, the
  1146.      following profiling functions will be called with the address of
  1147.      the current function and its call site.  (On some platforms,
  1148.      `__builtin_return_address' does not work beyond the current
  1149.      function, so the call site information may not be available to the
  1150.      profiling functions otherwise.)
  1151.  
  1152.           void __cyg_profile_func_enter (void *this_fn, void *call_site);
  1153.           void __cyg_profile_func_exit  (void *this_fn, void *call_site);
  1154.  
  1155.      The first argument is the address of the start of the current
  1156.      function, which may be looked up exactly in the symbol table.
  1157.  
  1158.      This instrumentation is also done for functions expanded inline in
  1159.      other functions.  The profiling calls will indicate where,
  1160.      conceptually, the inline function is entered and exited.  This
  1161.      means that addressable versions of such functions must be
  1162.      available.  If all your uses of a function are expanded inline,
  1163.      this may mean an additional expansion of code size.  If you use
  1164.      `extern inline' in your C code, an addressable version of such
  1165.      functions must be provided.  (This is normally the case anyways,
  1166.      but if you get lucky and the optimizer always expands the
  1167.      functions inline, you might have gotten away without providing
  1168.      static copies.)
  1169.  
  1170.      A function may be given the attribute `no_instrument_function', in
  1171.      which case this instrumentation will not be done.  This can be
  1172.      used, for example, for the profiling functions listed above,
  1173.      high-priority interrupt routines, and any functions from which the
  1174.      profiling functions cannot safely be called (perhaps signal
  1175.      handlers, if the profiling routines generate output or allocate
  1176.      memory).
  1177.  
  1178. `-fstack-check'
  1179.      Generate code to verify that you do not go beyond the boundary of
  1180.      the stack.  You should specify this flag if you are running in an
  1181.      environment with multiple threads, but only rarely need to specify
  1182.      it in a single-threaded environment since stack overflow is
  1183.      automatically detected on nearly all systems if there is only one
  1184.      stack.
  1185.  
  1186. `-fargument-alias'
  1187. `-fargument-noalias'
  1188. `-fargument-noalias-global'
  1189.      Specify the possible relationships among parameters and between
  1190.      parameters and global data.
  1191.  
  1192.      `-fargument-alias' specifies that arguments (parameters) may alias
  1193.      each other and may alias global storage.  `-fargument-noalias'
  1194.      specifies that arguments do not alias each other, but may alias
  1195.      global storage.  `-fargument-noalias-global' specifies that
  1196.      arguments do not alias each other and do not alias global storage.
  1197.  
  1198.      Each language will automatically use whatever option is required by
  1199.      the language standard.  You should not need to use these options
  1200.      yourself.
  1201.  
  1202. `-fleading-underscore'
  1203.      This option and its counterpart, -fno-leading-underscore, forcibly
  1204.      change the way C symbols are represented in the object file.  One
  1205.      use is to help link with legacy assembly code.
  1206.  
  1207.      Be warned that you should know what you are doing when invoking
  1208.      this option, and that not all targets provide complete support for
  1209.      it.
  1210.  
  1211.